#ifndef __COMMON_H__
#define __COMMON_H__

#include <stdint.h>

#define MAX_NAME_LENGTH 128

#define MD5_LENGTH 16 // md5校验码长度

#define FRAME_HEAD 0xa1 // 帧头

#define FRAME_TAIL 0xa2 // 帧尾

// 功能号
#define FN_FILE 0x01 // 代表帧内容为文件
#define FN_MD5 0x02  // 代表帧内容为md校验码

// 错误码
#define FRAME_ERR 0xe0     // 错误帧
#define FRAME_ERR_CRC 0xe1 // crc校验错误
#define FRAME_ERR_MD5 0xe2 // MD5校验错误
#define FRAME_ERR_OFB 0xe3 // out of band，帧内容带外错误

#define CALLOC_ERR 0xe4 // 内存分配失败
// 成功码
#define SUCCESS 0

typedef int8_t RetCode_t; // 返回码

typedef int16_t FileNo_t;      // 文件分块号
typedef uint8_t Fn_t;          // 功能位（导标）
typedef int16_t FileLength_t;  // 文件长度
typedef uint8_t *FileBody_ptr; // 文件尾部

// 布尔类型声明
enum Boolen {
    True = 1,
    False = !(True)
};

typedef uint8_t *Stream_ptr;

typedef struct {
    uint8_t name[MAX_NAME_LENGTH + 1];
    uint8_t MD5[MD5_LENGTH + 1];
} FileInfo;

typedef struct {
    uint8_t name[MAX_NAME_LENGTH + 1];
    uint16_t spilt_no;
} FileSpiltInfo;

#endif // !__COMMON_H__
